# Python3 File(文件) 方法
# open() 方法
# Python open() 方法用于打开一个文件，并返回文件对象，在对文件进行处理过程都需要使用到这个函数，如果该文件无法被打开，会抛出 OSError。
#
# 注意：使用 open() 方法一定要保证关闭文件对象，即调用 close() 方法。
#
# open() 函数常用形式是接收两个参数：文件名(file)和模式(mode)。
#
# open(file, mode='r')
# 完整的语法格式为：
#
# open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
# 参数说明:
#
# file:         必需，文件路径（相对或者绝对路径）。
# mode:         可选，文件打开模式
# buffering:    设置缓冲
# encoding:     一般使用utf8
# errors:       报错级别
# newline:      区分换行符
# closefd:      传入的file参数类型
# opener:       设置自定义开启器，开启器的返回值必须是一个打开的文件描述符。
# mode 参数有：
#
# 模式	描述
# t	    文本模式 (默认)。
# x	    写模式，新建一个文件，如果该文件已存在则会报错。
# b	    二进制模式。
# +	    打开一个文件进行更新(可读可写)。
# U	    通用换行模式（Python 3 不支持）。
# r	    以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
# rb	以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
# r+	打开一个文件用于读写。文件指针将会放在文件的开头。
# rb+	以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
# w	    打开一个文件只用于写入。如果该文件已存在则打开文件，并从开头开始编辑，即原有内容会被删除。如果该文件不存在，创建新文件。
# wb	以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件，并从开头开始编辑，即原有内容会被删除。如果该文件不存在，创建新文件。一般用于非文本文件如图片等。
# w+	打开一个文件用于读写。如果该文件已存在则打开文件，并从开头开始编辑，即原有内容会被删除。如果该文件不存在，创建新文件。
# wb+	以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件，并从开头开始编辑，即原有内容会被删除。如果该文件不存在，创建新文件。一般用于非文本文件如图片等。
# a	    打开一个文件用于追加。如果该文件已存在，文件指针将会放在文件的结尾。也就是说，新的内容将会被写入到已有内容之后。如果该文件不存在，创建新文件进行写入。
# ab	以二进制格式打开一个文件用于追加。如果该文件已存在，文件指针将会放在文件的结尾。也就是说，新的内容将会被写入到已有内容之后。如果该文件不存在，创建新文件进行写入。
# a+	打开一个文件用于读写。如果该文件已存在，文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在，创建新文件用于读写。
# ab+	以二进制格式打开一个文件用于追加。如果该文件已存在，文件指针将会放在文件的结尾。如果该文件不存在，创建新文件用于读写。
# 默认为文本模式，如果要以二进制模式打开，加上 b 。


# 读文件
file = open('test.txt', 'r')

isatty = file.isatty()
print(f"isatty()是否连接到一个终端设备：{isatty}")

file_no = file.fileno()
print(f"fileno()整型的文件描述是：{file_no}")

file_content = file.readline()
print(f"file.readline()读取文件一行内容是：{file_content}")

file_content = file.read()
print(f"file.read()读取文件余下内容是：{file_content}")

file_seek = file.seek(0)
print(f"file.seek(0)移动文件读取指针到指定的位置：{file_seek}")

file_content = file.readlines()
print(f"file.readlines()读取所有行，返回列表：{file_content}")

file_current_index = file.tell()
print(f"file.tell()文件当前位置是：{file_current_index}")

file_seek = file.seek(0)
print(f"file.seek(0)移动文件读取指针到指定的位置：{file_seek}")

# file.truncate(1)
# file_content = file.read()
# print(f"file.truncate(1) 从文件首字符开始截取到指定位置：{file_content}")

# 最后需要关闭文件连接
file.close()

print(f"写文件")
print()

# 写文件
try:
    fo = open("t.txt", "w")
except FileNotFoundError as e:
    print("No such file or directory")


print(f"文件名称是：{fo.name}")
str = """
    6:www.t.com
        
        test
        """
# 在文件末尾写入一行
fo.seek(0, 2)
line = fo.write(str)
fo.close()
fo = open("t.txt", "r+")
# 读取文件所有内容
fo.seek(0, 0)
contentList = fo.readlines()
print("获取文件内容的列表：", contentList)

for index in contentList:

    print(f"每行的文件内容：{index}")

# 关闭文件
fo.close()
